#pragma once
#include "Object.h"
#include "Vdisk.h"
#include "Clean.h"

#define COMPLETE_REQUEST( _pIrp, _Status, _Information )    \
        {                                                   \
            ASSERT( _pIrp != NULL );                        \
            ASSERT( KeGetCurrentIrql() <= DISPATCH_LEVEL ); \
            _pIrp->IoStatus.Status = _Status;               \
            _pIrp->IoStatus.Information = _Information;     \
            IoCompleteRequest( _pIrp, IO_NO_INCREMENT );    \
        }


NTSTATUS IrpRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS IrpWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS IrpCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS IrpClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS IrpDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS IrpPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
